package com.bnz.controller;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.bnz.entity.Emp;
import com.bnz.entity.PageResult;
import com.bnz.entity.EmpVo;
import com.bnz.service.IDeptService;
import com.bnz.service.IEmpService;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.*;
import org.springframework.stereotype.Controller;

import java.util.List;

/**
 * <p>
 *  前端控制器
 * </p>
 *
 * @author wangye
 * @since 2023-03-21
 */
@Controller
@RequestMapping("/emp")
public class EmpController {
    @Autowired
    private IEmpService empService;
    @Autowired
    private IDeptService deptService;
    // 1. 查询所有员工
    @GetMapping("/list")
    public String list(Model model){
        // 1.1 查询所有员工
        List<Emp> emps = empService.list();
        // 1.2 给每个员工找到对应的部门
        emps.forEach(emp -> {
            emp.setDname(deptService.getById(emp.getDid()).getDname());
        });
        // 1.2 将结果放到model中
        model.addAttribute("emps",emps);
        // 1.3 返回逻辑视图
        return "index";
    }
    // 2. 分页查询
    @RequestMapping("/findByPage")
    public String findByPage(@RequestParam(required = false,defaultValue = "1") int page,
                             @RequestParam(required = false,defaultValue = "5") int pageSize,
                             Model model){
        // 2.1 查询所有员工
        Page<Emp> empPage = empService.page(new Page<>(page, pageSize));
        // 2.2 给每个员工找到对应的部门
        for (Emp emp : empPage.getRecords()) {
            emp.setDname(deptService.getById(emp.getDid()).getDname());
        }
        // 2.3 转换为PageResult集合
        PageResult<Emp> pageResult = new PageResult<>(empPage.getTotal(),empPage.getRecords(),empPage.getPages(),page);
        // 2.4 将结果放到model中
        model.addAttribute("pr",pageResult);
        // 2.5 返回逻辑视图
        return "index";
    }
    // 3. 条件查询带分页
    @RequestMapping("/search")
    public String search(@RequestParam(required = false,defaultValue = "1") int page,
                         @RequestParam(required = false,defaultValue = "5") int pageSize,
                         Model model,
                         EmpVo vo){
        // 3.1 封装查询条件
        QueryWrapper<Emp> wrapper = new QueryWrapper<>();
        wrapper.like(StringUtils.isNotBlank(vo.getEname()),"ename",vo.getEname())
                .like(StringUtils.isNotBlank(vo.getCity()),"city",vo.getCity())
                .eq(vo.getDid() != null && vo.getDid() != 0,"did",vo.getDid());
        // 3.2 条件查询
        Page<Emp> empPage = empService.page(new Page<>(page, pageSize), wrapper);
        // 3.3 给每个员工找到对应部门
        for (Emp emp : empPage.getRecords()) {
            emp.setDname(deptService.getById(emp.getDid()).getDname());
        }
        // 3.4 转换为PageResult<>对象
        PageResult<Emp> pageResult = new PageResult<>(empPage.getTotal(),empPage.getRecords(),empPage.getPages(),page);
        // 3.5 将结果放到model中
        model.addAttribute("pr",pageResult);
        model.addAttribute("vo",vo);
        model.addAttribute("dept",deptService.list());
        // 3.6 返回逻辑视图
        return "index";
    }
}
